@@ -11,8 +11,10 @@ from django.db import transaction  | 
            ||
| 11 | 11 | 
                from django.db.models import Count, Q, Sum  | 
            
| 12 | 12 | 
                from django_logit import logit  | 
            
| 13 | 13 | 
                from django_response import response  | 
            
| 14 | 
                +from django.contrib.auth.hashers import make_password  | 
            |
| 14 | 15 | 
                from paginator import pagination  | 
            
| 15 | 16 | 
                from TimeConvert import TimeConvert as tc  | 
            
| 17 | 
                +from pysnippets.strsnippets import strip  | 
            |
| 16 | 18 | 
                 | 
            
| 17 | 19 | 
                from account.models import UserInfo  | 
            
| 18 | 20 | 
                from api.encrypt_views import get_ciphertext  | 
            
                @@ -1635,3 +1637,124 @@ def complement_code_contacted(request):  | 
            ||
| 1635 | 1637 | 
                log.save()  | 
            
| 1636 | 1638 | 
                 | 
            
| 1637 | 1639 | 
                return response()  | 
            
| 1640 | 
                +  | 
            |
| 1641 | 
                +  | 
            |
| 1642 | 
                +def administrator_list(request):  | 
            |
| 1643 | 
                +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
               | 
            |
| 1644 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 1645 | 
                +    page = request.POST.get('page', 1)
               | 
            |
| 1646 | 
                +    num = request.POST.get('num', 20)
               | 
            |
| 1647 | 
                +  | 
            |
| 1648 | 
                + if brand_id != settings.KODO_DEFAULT_BRAND_ID:  | 
            |
| 1649 | 
                + return response(ProductBrandStatusCode.BRAND_NOT_MATCH)  | 
            |
| 1650 | 
                +  | 
            |
| 1651 | 
                + try:  | 
            |
| 1652 | 
                + administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)  | 
            |
| 1653 | 
                + except AdministratorInfo.DoesNotExist:  | 
            |
| 1654 | 
                + return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)  | 
            |
| 1655 | 
                +  | 
            |
| 1656 | 
                + if administrator.admin_type != AdministratorInfo.ADMINISTRATOR:  | 
            |
| 1657 | 
                + return response(AdministratorStatusCode.ADMINISTRATOR_PERMISSION_DENIED)  | 
            |
| 1658 | 
                +  | 
            |
| 1659 | 
                +    logs = AdministratorInfo.objects.filter(status=True).order_by('-created_at')
               | 
            |
| 1660 | 
                +  | 
            |
| 1661 | 
                + count = logs.count()  | 
            |
| 1662 | 
                + logs, left = pagination(logs, page, num)  | 
            |
| 1663 | 
                + logs = [log.admindata for log in logs]  | 
            |
| 1664 | 
                +    return response(200, 'Get Admin List Success', u'获取后台管理员成功', data={
               | 
            |
| 1665 | 
                + 'logs': logs,  | 
            |
| 1666 | 
                + 'left': left,  | 
            |
| 1667 | 
                + 'count': count  | 
            |
| 1668 | 
                + })  | 
            |
| 1669 | 
                +  | 
            |
| 1670 | 
                +  | 
            |
| 1671 | 
                +def administrator_create(request):  | 
            |
| 1672 | 
                +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
               | 
            |
| 1673 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 1674 | 
                +  | 
            |
| 1675 | 
                +    admin_type = request.POST.get('admin_type', '')
               | 
            |
| 1676 | 
                +    phone = request.POST.get('phone', '')
               | 
            |
| 1677 | 
                +    name = request.POST.get('name', '')
               | 
            |
| 1678 | 
                +    password = request.POST.get('password', '')
               | 
            |
| 1679 | 
                +    brand_name = request.POST.get('brand_name', '')
               | 
            |
| 1680 | 
                +  | 
            |
| 1681 | 
                + if brand_id != settings.KODO_DEFAULT_BRAND_ID:  | 
            |
| 1682 | 
                + return response(ProductBrandStatusCode.BRAND_NOT_MATCH)  | 
            |
| 1683 | 
                +  | 
            |
| 1684 | 
                + try:  | 
            |
| 1685 | 
                + administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)  | 
            |
| 1686 | 
                + except AdministratorInfo.DoesNotExist:  | 
            |
| 1687 | 
                + return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)  | 
            |
| 1688 | 
                +  | 
            |
| 1689 | 
                + if administrator.admin_type != AdministratorInfo.ADMINISTRATOR:  | 
            |
| 1690 | 
                + return response(AdministratorStatusCode.ADMINISTRATOR_PERMISSION_DENIED)  | 
            |
| 1691 | 
                +  | 
            |
| 1692 | 
                + encryption = make_password(strip(password), settings.MAKE_PASSWORD_SALT, settings.MAKE_PASSWORD_HASHER)  | 
            |
| 1693 | 
                +  | 
            |
| 1694 | 
                + AdministratorInfo.objects.create(  | 
            |
| 1695 | 
                + brand_id=brand_id,  | 
            |
| 1696 | 
                + brand_name=brand_name,  | 
            |
| 1697 | 
                + admin_type=admin_type,  | 
            |
| 1698 | 
                + phone=phone,  | 
            |
| 1699 | 
                + name=name,  | 
            |
| 1700 | 
                + password='',  | 
            |
| 1701 | 
                + encryption=encryption,  | 
            |
| 1702 | 
                + )  | 
            |
| 1703 | 
                +  | 
            |
| 1704 | 
                + return response(200, 'Create Admin Success', u'创建后台管理员成功')  | 
            |
| 1705 | 
                +  | 
            |
| 1706 | 
                +  | 
            |
| 1707 | 
                +def administrator_update(request):  | 
            |
| 1708 | 
                +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
               | 
            |
| 1709 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 1710 | 
                +  | 
            |
| 1711 | 
                +    target_admin_id = request.POST.get('target_admin_id', '')
               | 
            |
| 1712 | 
                +    admin_type = int(request.POST.get('admin_type', 3))
               | 
            |
| 1713 | 
                +    phone = request.POST.get('phone', '')
               | 
            |
| 1714 | 
                +    name = request.POST.get('name', '')
               | 
            |
| 1715 | 
                +    password = request.POST.get('password', '')
               | 
            |
| 1716 | 
                +  | 
            |
| 1717 | 
                + if brand_id != settings.KODO_DEFAULT_BRAND_ID:  | 
            |
| 1718 | 
                + return response(ProductBrandStatusCode.BRAND_NOT_MATCH)  | 
            |
| 1719 | 
                +  | 
            |
| 1720 | 
                + try:  | 
            |
| 1721 | 
                + administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)  | 
            |
| 1722 | 
                + except AdministratorInfo.DoesNotExist:  | 
            |
| 1723 | 
                + return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)  | 
            |
| 1724 | 
                +  | 
            |
| 1725 | 
                + if administrator.admin_type != AdministratorInfo.ADMINISTRATOR:  | 
            |
| 1726 | 
                + return response(AdministratorStatusCode.ADMINISTRATOR_PERMISSION_DENIED)  | 
            |
| 1727 | 
                +  | 
            |
| 1728 | 
                + encryption = make_password(strip(password), settings.MAKE_PASSWORD_SALT, settings.MAKE_PASSWORD_HASHER)  | 
            |
| 1729 | 
                +  | 
            |
| 1730 | 
                + AdministratorInfo.objects.filter(admin_id=target_admin_id, brand_id=brand_id).update(  | 
            |
| 1731 | 
                + admin_type=admin_type,  | 
            |
| 1732 | 
                + phone=phone,  | 
            |
| 1733 | 
                + name=name,  | 
            |
| 1734 | 
                + password='',  | 
            |
| 1735 | 
                + encryption=encryption,  | 
            |
| 1736 | 
                + )  | 
            |
| 1737 | 
                +  | 
            |
| 1738 | 
                + return response(200, 'Update Admin Success', u'更新后台管理员成功')  | 
            |
| 1739 | 
                +  | 
            |
| 1740 | 
                +  | 
            |
| 1741 | 
                +def administrator_delete(request):  | 
            |
| 1742 | 
                +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
               | 
            |
| 1743 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 1744 | 
                +    target_admin_id = request.POST.get('target_admin_id', '')
               | 
            |
| 1745 | 
                +  | 
            |
| 1746 | 
                + if brand_id != settings.KODO_DEFAULT_BRAND_ID:  | 
            |
| 1747 | 
                + return response(ProductBrandStatusCode.BRAND_NOT_MATCH)  | 
            |
| 1748 | 
                +  | 
            |
| 1749 | 
                + try:  | 
            |
| 1750 | 
                + administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)  | 
            |
| 1751 | 
                + except AdministratorInfo.DoesNotExist:  | 
            |
| 1752 | 
                + return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)  | 
            |
| 1753 | 
                +  | 
            |
| 1754 | 
                + if administrator.admin_type != AdministratorInfo.ADMINISTRATOR:  | 
            |
| 1755 | 
                + return response(AdministratorStatusCode.ADMINISTRATOR_PERMISSION_DENIED)  | 
            |
| 1756 | 
                +  | 
            |
| 1757 | 
                +  | 
            |
| 1758 | 
                + AdministratorInfo.objects.filter(admin_id=target_admin_id).update(status=False)  | 
            |
| 1759 | 
                +  | 
            |
| 1760 | 
                + return response(200, 'Delete Admin Success', u'删除后台管理员成功')  | 
            
                @@ -181,6 +181,11 @@ urlpatterns += [  | 
            ||
| 181 | 181 | 
                url(r'^admin/member/goods/details$', admin_views.member_goods_details, name='member_goods_details'),  | 
            
| 182 | 182 | 
                url(r'^admin/member/goods/create$', admin_views.member_goods_create, name='member_goods_create'),  | 
            
| 183 | 183 | 
                url(r'^admin/member/goods/update$', admin_views.member_goods_update, name='member_goods_update'),  | 
            
| 184 | 
                +  | 
            |
| 185 | 
                + url(r'^admin/administrator/list$', admin_views.administrator_list, name='administrator_list'),  | 
            |
| 186 | 
                + url(r'^admin/administrator/create$', admin_views.administrator_create, name='administrator_create'),  | 
            |
| 187 | 
                + url(r'^admin/administrator/update$', admin_views.administrator_update, name='administrator_update'),  | 
            |
| 188 | 
                + url(r'^admin/administrator/delete$', admin_views.administrator_delete, name='administrator_delete'),  | 
            |
| 184 | 189 | 
                ]  | 
            
| 185 | 190 | 
                 | 
            
| 186 | 191 | 
                urlpatterns += [  | 
            
                @@ -57,6 +57,16 @@ class AdministratorInfo(BaseModelMixin):  | 
            ||
| 57 | 57 | 
                def __unicode__(self):  | 
            
| 58 | 58 | 
                         return u'{}-{}'.format(self.name, self.phone)
               | 
            
| 59 | 59 | 
                 | 
            
| 60 | 
                + @property  | 
            |
| 61 | 
                + def admindata(self):  | 
            |
| 62 | 
                +        return {
               | 
            |
| 63 | 
                + 'admin_id': self.admin_id,  | 
            |
| 64 | 
                + 'admin_type': self.admin_type,  | 
            |
| 65 | 
                + 'phone': self.phone,  | 
            |
| 66 | 
                + 'name': self.name,  | 
            |
| 67 | 
                + 'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d'),  | 
            |
| 68 | 
                + }  | 
            |
| 69 | 
                +  | 
            |
| 60 | 70 | 
                 | 
            
| 61 | 71 | 
                class OperatorInfo(BaseModelMixin):  | 
            
| 62 | 72 | 
                ACTIVATED = 1  | 
            
                @@ -128,6 +128,8 @@ class MaintenanceStatusCode(BaseStatusCode):  | 
            ||
| 128 | 128 | 
                class AdministratorStatusCode(BaseStatusCode):  | 
            
| 129 | 129 | 
                """ 操作员相关错误码 4002xx """  | 
            
| 130 | 130 | 
                ADMINISTRATOR_NOT_FOUND = StatusCodeField(400201, 'Administrator Not Found', description=u'管理员不存在')  | 
            
| 131 | 
                + ADMINISTRATOR_PERMISSION_DENIED = StatusCodeField(508002, 'Administrator Permission Denied', description=u'管理员权限不足')  | 
            |
| 132 | 
                +  | 
            |
| 131 | 133 | 
                # 密码  | 
            
| 132 | 134 | 
                ADMINISTRATOR_PASSWORD_ERROR = StatusCodeField(400202, 'Administrator Password Error', description=u'管理员密码错误')  | 
            
| 133 | 135 | 
                # 手机号  |